1. Field of the Invention
The invention relates generally to Serial Attached SCSI (SAS) domains and more specifically relates to enhanced SAS expanders.
2. Discussion of Related Art
In SAS domains (i.e., electronic systems implementing a switched SAS fabric), it is common for a Redundant Array of Independent Disks (RAID) controller to manage a large number of RAID logical volumes. RAID volumes offer benefits over other logical volumes because RAID volumes provide striped data for enhanced performance, and may also provide redundancy information for data to enhance reliability.
SAS storage devices that provision RAID logical volumes may be coupled for communication with the RAID controller via one or more SAS expanders. The SAS expanders route commands from the RAID controller to the appropriate storage devices.
When a RAID controller manages a RAID volume, common tasks may include managing input and output (I/O) commands directed to the volume, performing consistency checks on the volume, etc. These various tasks may further include maintaining Protection Information (PI) such as Data Integrity Fields (DIFs) at the RAID volume. PI is used to determine whether the data retrieved from a RAID volume matches the data that was originally stored on the devices that provision the RAID volume. For example, PI may exist in the form of a DIF that is updated every time a corresponding block of the RAID volume is modified. Then, when the block is read by the RAID controller, the RAID controller (and/or the storage device) may check the DIF. For example, the RAID controller may check a GUARD field of the DIF, while the storage device may check a reference tag and application tag of the DIF to ensure validity of the data. If there is a mismatch, the RAID controller may determine that there was an error in reading the block or the DIF, or may determine that the block or the DIF is corrupted.
The standards for PI and DIF data are laid out by the T10 committee in the End-to-End Data Protection Justification document, such the one issued by the T10 committee on Jul. 1, 2003 (T10/03-224r0), herein incorporated by reference.
Maintaining PI for a RAID volume takes up substantial amounts of processing power at the controller, because the controller generates and transmits a vast number of I/O commands to various storage devices as it generates the PI information. This problem is amplified when a RAID volume is first defined and initialized, as the controller may generate PI for each and every block of the RAID volume in order to initialize the volume. Thus, there may be a command directed from the RAID controller to each and every block of the RAID volume (e.g., hundreds of thousands, if not millions of commands). This is undesirable because this occupies processing resources at the RAID controller that could otherwise be used to process host I/O. Furthermore, generating and maintaining PI for a RAID volume can reduce the available bandwidth of the entire SAS domain, because communication channels between the controller and the expanders that route PI I/O to the appropriate storage devices may be occupied. This precludes other connections that would use the same pathways through the SAS expanders.
Thus it is an ongoing challenge to enhance the performance of a RAID controller in regard to RAID Protection Information (PI).